home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / gnu / oleo_src.lha / src / global.h < prev    next >
C/C++ Source or Header  |  1992-07-27  |  5KB  |  181 lines

  1. /*    Copyright (C) 1990 Free Software Foundation, Inc.
  2.  
  3. This file is part of Oleo, the GNU Spreadsheet.
  4.  
  5. Oleo is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 1, or (at your option)
  8. any later version.
  9.  
  10. Oleo is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with Oleo; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. /* The most important compile-time constant.  How many bits do we want to
  20.    allocate for cell-references?  Useful values are 8 and 16 (at the moment)
  21.    8 allows luser to access 255*255 cells (probably big enough)
  22.    16 allows luser to access 65535*65535, which is more than will fit in
  23.    the avaliable virtual memory on any 32-bit machine.
  24.  */
  25.  
  26. #ifndef BITS_PER_CELLREF
  27. #define BITS_PER_CELLREF 8
  28. #endif
  29.  
  30. /* The location of a cell that can never be referenced */
  31. #define NON_ROW        0
  32. #define NON_COL        0
  33.  
  34. #define MIN_ROW        1
  35. #define MIN_COL     1
  36.  
  37. #if BITS_PER_CELLREF==16
  38. typedef unsigned short CELLREF;
  39. #define CELLREF_MASK 0xFFFF
  40. #define MAX_ROW 65535
  41. #define MAX_COL 65535
  42.  
  43. /* Do *not* assume that 'name' is aligned!  It probably isn't */
  44. #define GET_ROW(name)        ((((name)[0])<<8)|(name)[1])
  45. #define GET_COL(name)        ((((name)[2])<<8)|(name)[3])
  46. #define PUT_ROW(name,val)    ((name)[0]=((val)>>8)),((name)[1]=val)
  47. #define PUT_COL(name,val)    ((name)[2]=((val)>>8)),((name)[3]=val)
  48. #define EXP_ADD            sizeof(CELLREF)*2
  49. #else
  50. #if BITS_PER_CELLREF==8
  51. typedef unsigned char CELLREF;
  52. #define CELLREF_MASK 0xFF
  53. #define MAX_ROW          255
  54. #define MAX_COL       255
  55.  
  56. #define GET_ROW(name)        ((name)[0])
  57. #define GET_COL(name)        ((name)[1])
  58. #define PUT_ROW(name,val)    ((name)[0]=(val))
  59. #define PUT_COL(name,val)    ((name)[1]=(val))
  60. #define EXP_ADD            sizeof(CELLREF)*2
  61. #else
  62. FOO FOO FOO You need to define the obvious macros above
  63. #endif
  64. #endif
  65.  
  66. /* Struct rng is used to describe a region of cells */
  67.  
  68. struct rng {
  69.     CELLREF lr,lc,hr,hc;
  70. };
  71.  
  72. /* refs_fm contains a list of the other cells that reference this one */
  73. /* The fm_refs array is actually variable-sized.  .refs_alloc tells how
  74.    many entries were allocated for it */
  75.  
  76. struct ref_fm {
  77. #ifdef SPLIT_REFS
  78.     unsigned short refs_alloc;
  79. #else
  80.     unsigned short refs_refcnt;
  81.     struct ref_fm *refs_next;
  82. #endif
  83.     unsigned short refs_used;
  84.     struct ref_array {
  85.         CELLREF ref_row;
  86.         CELLREF ref_col;
  87.     } fm_refs[1];
  88. };
  89.  
  90. /* refs_to is a vector of locations in the cell's formula where the
  91.    cell references other cells, ranges, or variables */
  92. struct ref_to {
  93. #ifdef SPLIT_REFS
  94.     unsigned short refs_alloc;
  95. #else
  96.     unsigned short refs_refcnt;
  97.     struct ref_to *refs_next;
  98. #endif
  99.     unsigned short refs_used;
  100.     unsigned char to_refs[1];
  101. };
  102.  
  103. #define GET_RNG(name,putit)    bcopy((VOIDSTAR)(name),(VOIDSTAR)(putit),sizeof(struct rng))
  104. #define PUT_RNG(name,putit)    bcopy((VOIDSTAR)(putit),(VOIDSTAR)(name),sizeof(struct rng))
  105. #define EXP_ADD_RNG        sizeof(struct rng)
  106.  
  107. #define ERR_MAX        17
  108.  
  109. extern struct obstack tmp_mem;
  110. extern VOIDSTAR tmp_mem_start;
  111.  
  112. extern char* ename[];
  113. extern const char tname[];
  114. extern const char fname[];
  115. extern const char iname[];
  116. extern const char mname[];
  117. extern const char nname[];
  118.  
  119. extern void error_msg EXT1N(char *);
  120. extern void text_line EXT1N(char *);
  121.  
  122. extern char *strdup EXT1(const char *);
  123. extern double astof EXT1(char **);
  124. extern long astol EXT1(char **);
  125. extern VOIDSTAR ck_malloc EXT1(size_t);
  126. extern VOIDSTAR ck_realloc EXT2(void *,size_t);
  127. extern void panic EXT1N(const char *);
  128.  
  129. extern VOIDSTAR init_stack EXT1(void);
  130. extern void flush_stack EXT1(void *);
  131. extern void push_stack EXT2(void *, void *);
  132. extern VOIDSTAR pop_stack EXT1(void *);
  133. extern int size_stack EXT1(void *);
  134.  
  135. extern void add_ref EXT2(CELLREF, CELLREF);
  136. extern void add_range_ref EXT1(struct rng *);
  137. extern void add_timer_ref EXT1(int);
  138. extern void add_ref_to EXT1(int);
  139.  
  140. extern VOIDSTAR parse_hash;
  141. extern char *hash_insert();
  142.  
  143. extern CELLREF cur_row;
  144. extern CELLREF cur_col;
  145.  
  146. extern unsigned short get_width EXT1(CELLREF);
  147. extern void set_width EXT2(CELLREF, unsigned short);
  148.  
  149. extern char *jst_to_str EXT1(int);
  150. extern char *fmt_to_str EXT1(int);
  151.  
  152. #ifdef A0_REFS
  153. extern char * col_to_str EXT1(CELLREF);
  154. #endif
  155.  
  156. extern char *flt_to_str EXT1(double);
  157. extern void push_refs EXT1(struct ref_fm *);
  158. extern void no_more_cells EXT0();
  159.  
  160. extern double __plinf, __neinf, __nan;
  161.  
  162. extern char *range_name EXT1(struct rng *);
  163. extern char *cell_name EXT2(CELLREF, CELLREF);
  164.  
  165. extern CELLREF curow,cucol;
  166. extern CELLREF cur_row,cur_col;
  167.  
  168. extern int default_jst;
  169. extern int default_fmt;
  170.  
  171. extern unsigned short current_cycle;
  172.  
  173. extern char *new_value EXT3(CELLREF, CELLREF, char *);
  174.  
  175. extern unsigned char parse_cell_or_range EXT2(char **,struct rng *);
  176.  
  177. extern void info_msg EXT1N(char *);
  178.  
  179. extern void for_all_vars EXT1(void (*)());
  180.  
  181.